package org.jsola.hr.constant;

import org.jsola.core.validator.IConst;
import org.jsola.json.JsonKit;

import java.util.HashMap;
import java.util.Map;

/**
 * 字段类型
 *
 * @author 吕永华
 */
public enum FieldType implements IConst {

    /**
     * 下拉框
     */
    DROP_DOWN(1,"下拉框"),
    /**
     * 单行文本
     */
    SINGLE_LINE_TEXT(2,"单行文本"),
    /**
     * 日期选择器
     */
    DATE_SELECTION(3,"日期选择器"),
    /**
     * 多行输入框
     */
    SINGLE_LINE_OF_TEXT(4,"多行输入框"),
    /**
     * 数字输入框
     */
    MULTIPLE_LINE_TEXT(5,"数字输入框"),
    /**
     * 地区(三级)
     */
    REGION(6,"地区(三级)"),
    /**
     * 上传图片
     */
    IMAGE_UPLOAD(7,"上传图片"),
    /**
     * 时间区间
     */
    TIME_INTERVAL(8,"时间区间"),
    /**
     * 详细地址
     */
    DETAILED_ADDRESS(9,"详细地址"),
    /**
     * 手机号
     */
    PHONE_INPUT(10,"手机号"),
    /**
     * 邮箱
     */
    EMAIL_INPUT(11,"邮箱"),
    /**
     * 地区(二级)
     */
    REGION_TWO(12,"地区(二级)"),
    /**
     * 日趋选择器(年月)
     */
    DATE2_SELECTION(13,"日趋选择器(年月)"),
    /**
     * 日期选择器(年月日时分秒)
     */
    DATETIME_SELECTION(14,"日期选择器(年月日时分秒)");

    private final Integer value;
    private final String desc;
    /**
     * 枚举值罗列，给swagger接口文档展示用
     */
    public static final String VALUES_STR = "1,2,3,4,5,6,7,8,9,10,11,12,13,14";

     /**
     * 缓存所有value
     */
    private static final Map<Integer, FieldType> LOOKUP = new HashMap<>();

    static {
        for (FieldType e : FieldType.values()) {
            LOOKUP.put(e.value, e);
        }
    }


    FieldType(Integer value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    /**
     * 根据value查找FieldType
     * @param value value
     * @return FieldType
     */
    public static FieldType find(Integer value) {
        return LOOKUP.get(value);
    }

    /**
     * 根据desc查找FieldType
     * @param desc desc
     * @return FieldType
     */
    public static FieldType findByDesc(String desc){
        for (FieldType e : FieldType.values()) {
            if(e.getDesc().equals(desc)){
                return e;
            }
        }
        return null;
    }

    /**
     * 所有枚举转json
     * @return json
     */
    public static String getAllToJson() {
        Map<String,Object> map = new HashMap<>();
        for (FieldType e : FieldType.values()) {
            map.put("value", e.value);
            map.put("desc", e.desc);
        }
        return JsonKit.toJSONString(map);
    }

    @Override
    public boolean check(Object obj) {
        Integer value = (Integer) obj;
        return find(value) != null;
    }

    public Integer getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }
}
